from flask import Flask, make_response
from flask_sqlalchemy import SQLAlchemy
from flask_wtf.csrf import CSRFProtect
from flask_bootstrap import Bootstrap
from flask_nav import Nav
from flask_nav.elements import *
from flask_login import UserMixin, LoginManager, login_required, login_user, logout_user, current_user
from config import config


csrf = CSRFProtect()
# 实例化Nav
nav = Nav()

app = Flask(__name__)
app.config.from_object('config')
app.config['SECRET_KEY'] = config.SECRET_KEY
app.config['SQLALCHEMY_DATABASE_URI'] = config.DB_URI
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True  # 设置这一项是每次请求结束后 都会自动提交数据库中的变动

# 初始化app
csrf.init_app(app=app)


# 2. 注册 navigation item
nav.register_element('top', Navbar(
    'ETL Mapping管理',
    View('首页', 'web_dim_product'),
    Subgroup(
        '维度表管理',
        View('数据库驱动类型', 'web_dim_db_driver_type'),
        Separator(),
        View('数据类型', 'web_dim_data_type'),
        Separator(),
        View('表字段/属性分类', 'web_dim_column_category'),
        Separator(),
        View('标准字段维护', 'web_dim_column'),
    ),
    Subgroup(
        '数据库管理',
        View('产品管理', 'web_dim_product'),
        Separator(),
        View('数据库管理', 'web_dim_db'),
        Separator(),
        View('表管理', 'web_table'),
    ),
    Subgroup(
        'Mapping',
        View('mapping关系维护', 'web_mapping_post'),
        Separator(),
        View('mapping搜索', 'web_mapping_post_search'),
    ),
    View('Sqoop调度api', 'web_sqoop_choice'),
    View('用户管理', 'user_manager'),
    Subgroup(
        '登陆信息',
        View('信息修改', 'user_modify'),
        Separator(),
        View('退出登录', 'logout'),
    ),
    )
                     )

login_manager = LoginManager()
login_manager.session_protection='strong'
login_manager.login_view='login'

# 初始化app
login_manager.init_app(app=app)
nav.init_app(app=app)

boostrap = Bootstrap(app=app)
db = SQLAlchemy(app)
